/* * (C) Copyright IBM Corp. 2014 * * LICENSE: Eclipse Public License v1.0 * http://www.eclipse.org/legal/epl-v10.html */ package com.ibm.gaiandb.mongodb; import java.net.ConnectException; import java.net.UnknownHostException; import javax.naming.AuthenticationException; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.MongoClient; /** * This class holds code allowing connection to a remote MongoDB process. * * @author Paul Stone */ public class MongoConnectionFactory { // Use PROPRIETARY notice if class contains a main() method, otherwise use COPYRIGHT notice. public static final String COPYRIGHT_NOTICE = "(c) Copyright IBM Corp. 2014"; /** * Returns a handle to a Mongo Collection object - which may be used to execute mongoDB queries. * * @param connectionParams - object containing all the parameters needed to connect to MongoDB * @exception UnknownHostException - if we cannot connect to the mongoDB host specified * @exception AuthenticationException - if authentication with the mongoDB process fails. * */ public static DBCollection getMongoCollection (MongoConnectionParams connectionParams) throws Exception{ String collectionName = connectionParams.getCollectionName(); if ( null == collectionName ) throw new Exception("Missing collection name. Check URL syntax matches 'usr:pwd@host:port/database/collection'"); // Now we should have an authenticated connection the mongo database, validate that the collection exists. DBCollection mongoCollection = getMongoDB(connectionParams).getCollection( collectionName ); return mongoCollection; } /** * Returns a handle to a Mongo DB object - which may be used to manage collections. * * @param connectionParams - object containing all the parameters needed to connect to MongoDB * @exception UnknownHostException - if we cannot connect to the mongoDB host specified * @exception AuthenticationException - if authentication with the mongoDB process fails. * */ public static DB getMongoDB (MongoConnectionParams connectionParams) throws Exception{ // connect to the mongo process MongoClient mongoClient = new MongoClient(connectionParams.getHostAddress(), connectionParams.getHostPort()); if (mongoClient == null) throw new ConnectException(MongoMessages.DSWRAPPER_MONGODB_CONNECTION_ERROR); // Connect to the specific database DB mongoDb = mongoClient.getDB(connectionParams.getDatabaseName()); // TBD possibly try to reuse these. if (mongoDb == null) throw new ConnectException(MongoMessages.DSWRAPPER_MONGODB_DATABASE_CONN_ERROR); // Authenticate if the configuration parameters have been set String userName = connectionParams.getUserName(); String password = connectionParams.getPassword(); if (userName != null && password != null) { boolean authenticated = mongoDb.authenticate(userName, password.toCharArray()); if (!authenticated){ throw new AuthenticationException(MongoMessages.DSWRAPPER_MONGODB_AUTHENTICATION_ERROR); } } return mongoDb; } /** * Closes the Mongo Collection object - frees up any resources held by the collection and the related * connection object. * * @param connectionParams - object containing all the parameters needed to connect to MongoDB * @exception UnknownHostException - if we cannot connect to the mongoDB host specified * @exception AuthenticationException - if authentication with the mongoDB process fails. * */ public static void closeMongoCollection (DBCollection mongoCollection) { //we have to close the mongo client object, get a reference to it via the database object. DB mongoDB = mongoCollection.getDB(); MongoClient mongoClient = (MongoClient)mongoDB.getMongo(); mongoClient.close(); } }